<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>

		<script>
			//变量和函数的提升同样适用于函数作用域

			/*
			var a = 1
			 function fn() {
				//在函数中，var声明的a也会先执行，但不会赋值。
				console.log(a) //undefined
				var a = 2 //局部中声明a,不会再访问外部的a 。
				console.log(a) //2
			}
			fn()
			console.log(a) //1 
			*/


			/* //变一下型
			function fn2() {
				console.log(a); //1
				a = 2;
				console.log(a); //2
			}
			fn2();
			console.log(a); //2 */

			//变一下型
			//定义形参就相当于在函数中声明了对应的变量，但是没有赋值
			/*var c = 1;
			 function fn3(c) {
				//c是函数内部的局部变量，只是没有赋值
				console.log(c);//undefined
				c = 3;
				console.log("c=", c); //3
			}
			fn3();
			console.log("c=", c);//2 */

			/*
				var c = 1;
				function fu3(c) {
					console.log(c); //10
					c = 3;
					console.log("c=", c);//3
				}
				fu3(10);
				console.log("c=", c);//1
			*/

			/*
						var a = 1;

						function fu3(a) {
							console.log(a); //1
							a = 3;
							console.log("a=", a); //3
						}
						fu3(a);
						console.log("a=", a); //1
						*/

			console.log(a) //2
			var a = 1 //var只是提升声明，没有赋值,下面重复声明var a也是一样，只提升一个。
			console.log(a)

			debugger

			function a() { //注意，方法名和变量名相同。
				alert(2)
			}

			function a() { //这一个会把前面的方法a覆盖。
				alert(5)
			}

			console.log(a)

			var a = 3;

			console.log(a)

			var a = function() {
				alert(4)
			}

			console.log(a)

			var a; //r只是提升声明，没有重新初始化。不会起到任何作用。

			console.log(a)
		</script>
	</head>
	<body>
	</body>
</html>